﻿#pragma once

#include "FITKInterfaceCustomDataAPI.h"
#include "FITK_Kernel/FITKCore/FITKCoreMacros.h"
#include <QMutex>
#include <QObject>

namespace Interface
{
    class FITKCDDataSolidManager;
    class FITKCDDataFluidManager;
    class FITKCDDataInletManager;
    class FITKCDDataOutletManager;
    class FITKCDMonitorSamplingPointManager;
	class FITKCDCfgPSetPhysicalManager;
	class FITKCDCfgPSetSwitchManager;
	class FITKCDCfgCSetComputationManager;
	class FITKCDCfgCSetBaseManager;
    class FITKCDCfgCSetPathManager;
	class FITKCDPost3DFixedWallManager;
	class FITKCDPost3DRigidBodyManager;
	class FITKCDPost3DFLuidManager;
    

    class FITKInterfaceCustomDataAPI FITKCDInterface : public QObject
    {
        DeclSingleton(FITKCDInterface);

    public:
        FITKCDDataSolidManager* getCDDataSolidManager();
		FITKCDDataFluidManager* getCDDataFluidManager();
		FITKCDDataInletManager* getCDDataInletManager();
		FITKCDDataOutletManager* getCDDataOutletManager();
		FITKCDMonitorSamplingPointManager* getCDSamplingPointManager();
		FITKCDCfgPSetPhysicalManager* getCDCfgPhysicalManager();
		FITKCDCfgPSetSwitchManager* getCDCfgSwitchManager();
		FITKCDCfgCSetComputationManager* getCDCfgComputationManager();
		FITKCDCfgCSetBaseManager* getCDCfgBaseManager();
		FITKCDCfgCSetPathManager* getCDCfgPathManager();
		FITKCDPost3DFixedWallManager* getCDPost3DFixedWallManager();
		FITKCDPost3DRigidBodyManager* getCDPost3DRigidBodyManager();
		FITKCDPost3DFLuidManager* getCDPost3DFLuidManager();

    private:
        void initialize();
        void finalize();

    private:
        FITKCDDataSolidManager* _pSolidManager;
		FITKCDDataFluidManager* _pFluidManager;
		FITKCDDataInletManager* _pInletManager;
		FITKCDDataOutletManager* _pOutletManager;
		FITKCDMonitorSamplingPointManager* _pSamplingPointManager;
		FITKCDCfgPSetPhysicalManager* _pPhysicalManager;
		FITKCDCfgPSetSwitchManager* _pSwitchManager;
		FITKCDCfgCSetComputationManager* _pComputationManager;
		FITKCDCfgCSetBaseManager* _pBaseManager;
		FITKCDCfgCSetPathManager* _pPathManager;
		FITKCDPost3DFixedWallManager* _pFixedWallManager;
		FITKCDPost3DRigidBodyManager* _pRigidBodyManager;
		FITKCDPost3DFLuidManager* _p3DFLuidManager;
    };
}

